#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <cstring>

int main()
{
    int fd = open("test.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
    if(fd < 0)
    {
        std::cerr << "open error" << std::endl;
        return 1;
    }

    dup2(fd, 1); // 输出重定向

    printf("printf\n");
    fprintf(stdout, "fprintf\n");

    const char* s = "write\n";
    size_t len = strlen(s);
    write(1, s, len);

    fork(); // 创建子进程
    return 0;
}

// int main()
// {
//     int fd = open("test.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
//     if(fd < 0)
//     {
//         std::cerr << "open error" << std::endl;
//         return 1;
//     }

//     dup2(fd, 1); // 让标准输出指向创建的新文件

//     std::cout << "hello world" << std::endl;
//     close(fd);
//     return 0;
// }

// int main()
// {
//     int fd1 = open("test1.txt", O_WRONLY | O_CREAT | O_TRUNC);
//     std::cout << "fd1 : " << fd1 << std::endl;

//     int fd2 = open("test2.txt", O_WRONLY | O_CREAT | O_TRUNC);
//     std::cout << "fd2 : " << fd2 << std::endl;

//     //关闭标准输入流
//     close(0);

//     int fd3 = open("test3.txt", O_WRONLY | O_CREAT | O_TRUNC);
//     std::cout << "fd3 : " << fd3 << std::endl;

//     int fd4 = open("test4.txt", O_WRONLY | O_CREAT | O_TRUNC);
//     std::cout << "fd4 : " << fd4 << std::endl;

//     int fd5 = open("test5.txt", O_WRONLY | O_CREAT | O_TRUNC);
//     std::cout << "fd5 : " << fd5 << std::endl;

//     close(fd1);
//     close(fd2);
//     close(fd3);
//     close(fd4);
//     close(fd5);
//     return 0;
// }

// int main()
// {
//     //从标准输入流读取数据
//     std::cout << "请输入：" << std::flush;
//     char buff[20];
//     int n = read(0, buff, sizeof(buff) - 1);
    
//     //向标准输出流写入数据
//     std::cout << "标准输出流：" << std::flush;
//     write(1, buff, n);

//     //向标准错误流写入数据
//     std::cout << "标准错误流：" << std::flush;
//     write(2, buff, n);
//     return 0;
// }

// int main()
// {
//     //以读的方式打开文件test.txt
//     int fd = open("test.txt", O_RDONLY);
//     if(fd < 0)
//     {
//         std::cerr << "文件打开失败" << std::endl;
//         return 1;
//     }

//     char buffer[128]; // 创建一个结构化数据，用于将文件读到内存中
//     int n = read(fd, buffer, sizeof(buffer) - 1); // 给'\0'留一个位置
//     if(n > 0)
//     {
//         //由于读入的是字符串，所以读取之后在末尾加上'\0'
//         buffer[n] = '\0';
        
//         //输出读到的数据
//         std::cout << buffer << std::endl;
//     }

//     //关闭文件
//     close(fd);
//     return 0;
// }

// int main()
// {
//     //以写的方式创建一个不存在的文件
//     int fd = open("test.txt", O_WRONLY | O_CREAT | O_TRUNC);
//     if(fd < 0) // 说明文件打开失败
//     {
//         std::cerr << "文件打开失败" << std::endl;
//     }

//     const char* s = "hello world";
//     write(fd, s, strlen(s)); // 写入

//     //关闭文件
//     close(fd);
//     return 0;
// }